// addAll 方法会对你传入的所有参数做求和操作
const addAll = function () {
    {
        console.log('进行了一次新的计算')
        let result = 0
        Array.prototype.forEach.call(arguments, x => {
            result += x
        })
        return result
    }
}

// 为求和方法创建代理
const proxyAddAll = (function () {
    // 求和结果的缓存池
    const resultCache = {}
    return function () {
        // 将入参转化为一个唯一的入参字符串
        const args = Array.prototype.join.call(arguments, ',')
        // 检查本次入参是否有对应的计算结果
        if (args in resultCache) {
            // 如果有 则直接返回缓存结果
            return resultCache[args]
        }
        return resultCache[args] = addAll(...arguments)
    }
})()

console.log(proxyAddAll(1, 2, 3, 5, 6))
console.log(proxyAddAll(1, 2, 3, 5, 6))
console.log(proxyAddAll(1, 2, 3, 5, 9))